from django.contrib.auth.models import User
from django.db import models

# Create your models here.

class Catalog(models.Model):
    """
    资源分类表：
	ID,  名字、 上一级分类ID（关系属性）,  录入时间、修改时间、是否删除
    """
    name = models.CharField(max_length=32,verbose_name="分类名称",db_comment="资源分类名称")

    # 关联自己使用self表示
    parent = models.ForeignKey(to='self',on_delete=models.CASCADE,
                               null=True,blank=True,related_name="sub_catalogs",
                               verbose_name="上一级分类",db_comment="上一级分类")

    create_time = models.DateTimeField(auto_now_add=True,verbose_name="录入时间",db_comment="录入时间")

    update_time = models.DateTimeField(auto_now=True,verbose_name="修改时间",db_comment="修改时间")

    is_delete = models.BooleanField(default=False,verbose_name="是否删除",db_comment="是否删除")

    def __str__(self):
        return self.name

    class Meta:
        db_table = "tb_catalog"
        verbose_name = "资源分类"
        verbose_name_plural = "资源分类"

class Resource(models.Model):
    """
    资源表：
	资源名、描述、关键字、所属分类（关系属性）、积分、资源存储路径、
	资源大小、浏览数量（不合适）、资源扩展名、 录入时间、
	资源等级(计算属性、不合适)、 下载次数 (不合适)、
	所属用户（关系属性）、 资源状态( 审核通过/未通过) 、
	原因 (未审核通过的原因) 、 审核人
	修改时间、是否删除 、 是否精选
    """
    name = models.CharField(max_length=255,verbose_name="资源名称",db_comment="资源名称")

    desc = models.TextField(verbose_name="资源描述",db_comment="资源描述",null=True,blank=True)

    keywords = models.CharField(max_length=128,verbose_name="资源关键字",db_comment="资源关键字")

    catalog = models.ForeignKey(to=Catalog,on_delete=models.CASCADE,
                                null=True,blank=True,
                                verbose_name="所属分类",db_comment="所属分类")

    score = models.IntegerField(default=0,verbose_name="资源积分",db_comment="资源积分")

    path = models.FileField(upload_to='resources/',verbose_name="资源存储路径",db_comment="资源存储路径")

    # 资源大小，存储单位 字节
    file_size = models.FloatField(verbose_name="资源大小(M)",db_comment="资源大小(M)",null=True,blank=True)

    ext = models.CharField(max_length=16,verbose_name="资源扩展名",db_comment="资源扩展名",null=True,blank=True)

    create_time = models.DateTimeField(auto_now_add=True,verbose_name="录入时间",db_comment="录入时间")

    update_time = models.DateTimeField(auto_now=True,verbose_name="修改时间",db_comment="修改时间")

    user = models.ForeignKey(to='auth.User',on_delete=models.CASCADE,
                             null=True,blank=True,
                             verbose_name="所属用户",db_comment="所属用户")


    status = models.CharField(max_length=10,choices=(('0','待审核'),('1','审核通过'),('-1','审核未通过')),
                              verbose_name="资源状态",db_comment="资源状态",default='0')

    reason = models.CharField(max_length=128,null=True,blank=True,
                              verbose_name="未通过原因",db_comment="审核未通过的原因")

    admin = models.CharField(max_length=150,verbose_name="审核人",db_comment="审核人",null=True,blank=True)

    is_beat = models.BooleanField(default=False,verbose_name="是否精选",db_comment="是否精选")

    is_delete = models.BooleanField(default=False,verbose_name="是否删除",db_comment="是否删除")

    class Meta:
        db_table = "tb_resource"

class ResourceDownloadHistory(models.Model):
    """
    资源下载历史表：
    用户（关系属性）、资源（关系属性）、下载时间、下载方式
    """
    user = models.ForeignKey(to=User,on_delete=models.CASCADE,
                             verbose_name="所属用户",db_comment="所属用户")

    resource = models.ForeignKey(to=Resource,on_delete=models.CASCADE,
                                 verbose_name="下载资源",db_comment="下载资源")

    download_time = models.DateTimeField(auto_now_add=True,verbose_name="下载时间",db_comment="下载时间")

    # download_type = models.CharField(max_length=10,verbose_name="下载方式",db_comment="下载方式")

    class Meta:
        db_table = "tb_resource_download_history"

class ResourceBrowseHistory(models.Model):
    """
    资源评论表

	资源（关系属性）、 评论用户（关系属性） 、
	资源星级、 评论内容， 评论时间、
	评论状态( 审核通过/未通过) 、
	原因 (未审核通过的原因) 、 审核人
	是否删除
	"""
    resource = models.ForeignKey(to=Resource,on_delete=models.CASCADE,verbose_name="资源")

    user = models.ForeignKey(to=User,on_delete=models.CASCADE,verbose_name="评论用户")

    star = models.IntegerField(verbose_name="资源星级",db_comment="资源星级",default=5)

    content = models.TextField(verbose_name="评论内容",db_comment="评论内容",null=True,blank=True)

    comment_time = models.DateTimeField(auto_now_add=True,verbose_name="评论时间",db_comment="评论时间")

    state = models.CharField(max_length=10,verbose_name="资源状态",choices=(('0','待审核'),('1','已审核'),('-1','未通过')),
                             default='0',db_comment="资源状态")

    reason = models.CharField(max_length=128,null=True,blank=True,
                              verbose_name="未通过原因",db_comment="审核未通过的原因")

    admin = models.CharField(max_length=150,verbose_name="审核人",db_comment="审核人",null=True,blank=True)

    is_delete = models.BooleanField(default=False,verbose_name="是否删除",db_comment="是否删除")

    class Meta:
        db_table = "tb_resource_browse_history"

class ResourceCollect(models.Model):
    """
    资源收藏表
    用户（关系属性）、资源（关系属性）、收藏时间
    """
    user = models.ForeignKey(to=User,on_delete=models.CASCADE,
                             verbose_name="所属用户",db_comment="所属用户")

    resource = models.ForeignKey(to=Resource,on_delete=models.CASCADE,
                                 verbose_name="收藏资源",db_comment="收藏资源")

    collect_time = models.DateTimeField(auto_now_add=True,verbose_name="收藏时间",db_comment="收藏时间")

    class Meta:
        db_table = "tb_resource_collect"
        unique_together = ("user","resource")